//
//  HMHomeTableViewController.swift
//  Weibo
//
//  Created by teacher on 2017/6/4.
//  Copyright © 2017年 teacher. All rights reserved.
//

import UIKit
import YYModel

class HMHomeTableViewController: HMVisitorTableViewController {

    //  引用ViewModel
    fileprivate lazy var homeViewModel: HMHomeViewModel = HMHomeViewModel()
    //  MARK:   --懒加载控件
    //  上拉加载控件
    fileprivate lazy var pullUpView: UIActivityIndicatorView = {
        let indicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge)
        indicatorView.color = UIColor.red
        return indicatorView
    }()
    
    //  下拉刷新控件
//    fileprivate lazy var pullDownView: UIRefreshControl = {
//        let ctr = UIRefreshControl()
//        //  添加valueChanged事件，监听刷新
//        ctr.addTarget(self, action: #selector(pullDownRefreshing), for: .valueChanged)
//        return ctr
//    }()
    
    fileprivate lazy var pullDownView: HMRefreshControl = {
        let ctr = HMRefreshControl()
        //  添加valueChanged事件，监听刷新
        ctr.addTarget(self, action: #selector(pullDownRefreshing), for: .valueChanged)
        return ctr
    }()
    
    //  tip消息
    fileprivate lazy var tipLabel: UILabel = {
        let label = UILabel(fontSize: 12, textColor: UIColor.white)
        label.backgroundColor = UIColor.orange
        label.text = "没有加载到最新微博数据"
        label.textAlignment = .center
        //  默认隐藏
        label.isHidden = true
        return label
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if !isLogin {
            //  修改访客视图信息
            visitorView?.updateVisitorViewInfo(imageName: nil, message: nil)
        } else {
            setupUI()
            //  登录
            loadData()
        }
    }
    
    //  添加控件
    private func setupUI() {
        if let nav = self.navigationController {
            nav.view.insertSubview(tipLabel, belowSubview: nav.navigationBar)
            //  nav.navigationBar.frame.maxY 获取视图的最大y
            tipLabel.frame = CGRect(x: 0, y: nav.navigationBar.frame.maxY - 35, width: nav.navigationBar.width, height: 35)
        }
        setTableView()
    }
    
    //  设置tableView
    private func setTableView() {
        tableView.register(HMHomeTableViewCell.self, forCellReuseIdentifier: HomeCellIdentifier)
        //  自动计算行高
        tableView.rowHeight = UITableViewAutomaticDimension
        //  设置预估高度
        tableView.estimatedRowHeight = 200
        //  去掉分割线
        tableView.separatorStyle = .none
        
        //  添加底部上拉刷新控件
        tableView.tableFooterView = pullUpView
        
        //  设置下拉刷新控件1
//        self.refreshControl = pullDownView
        //  给tableView添加pullDownView视图(UIRefreshControl)
        //  设置下拉刷新控件2
        tableView.addSubview(pullDownView)
        
    }

    //  请求微博数据
    fileprivate func loadData() {
        //  pullUpView.isAnimating,如果上拉视图开启动画表示上拉加载也就是true，否则是下拉刷新，也就是false
        homeViewModel.loadData(isUp: pullUpView.isAnimating) { (isSuccess: Bool, message: String) in
            //  只要不是上拉加载就开启tip动画
            if self.pullUpView.isAnimating == false {
                //  开启动画
                self.startTipAnimation(message: message)
            }
            
            //  请求完成，结束刷新
            self.endRefreshing()
            
            if isSuccess {
                //  数据请求成功后，重新加载数据
                self.tableView.reloadData()
            }
        }
    }
    
    //  MARK:   --下拉刷新
    @objc private func pullDownRefreshing() {
        print("执行下拉刷新")
        loadData()
    }
    
    //  结束刷新
    fileprivate func endRefreshing() {
        pullUpView.stopAnimating()
        //  结束刷新
        pullDownView.endRefreshing()
    }
    
    //  MARK:   -tip动画
    fileprivate func startTipAnimation(message: String) {
        
        //  如果控件可以看到说明在执行tip动画，在执行动画直接return
        if tipLabel.isHidden == false {
            return
        }
        
        //  显示tip
        tipLabel.isHidden = false
        tipLabel.text = message
        
        UIView.animate(withDuration: 1, animations: { 
            self.tipLabel.transform = CGAffineTransform(translationX: 0, y: self.tipLabel.height)
        }) { (_) in
            UIView.animate(withDuration: 1, animations: { 
                self.tipLabel.transform = CGAffineTransform.identity
            }, completion: { (_) in
                //  动画执行完隐藏tiplabel
                self.tipLabel.isHidden = true
            })
        }
    }
}

extension HMHomeTableViewController {
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return homeViewModel.statusList.count
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: HomeCellIdentifier, for: indexPath) as! HMHomeTableViewCell
        //  设置选中样式
        cell.selectionStyle = .none
        //  根据行的索引获取对于的ViewModel
        let viewModel =  homeViewModel.statusList[indexPath.row]
        //  给cell设置ViewModel显示数据
        cell.statusViewModel = viewModel        
        return cell
    }
    
    //  将要显示cell的方法
    override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        //  上拉加载更多，第一个等于最后一个cell索引并且这个上拉视图没有开启动画
        if indexPath.row == homeViewModel.statusList.count - 1 && !pullUpView.isAnimating {
            print("滚动到最后一个cell了")
            pullUpView.startAnimating()
            loadData()
        }
    }

}








